String
This page documents the changes & additions to the string library in Pluto, which is built on top of Lua 5.4's.
string.upper
This function now takes a second parameter that specifies which index to capitalize.
plutolocal s = "hello"assert(s:upper(1) == "Hello")
string.lower
This function now takes a second parameter that specifies which index to make lowercase.
plutolocal s = "HELLO"assert(s:lower(1) == "hELLO")
string.split
Splits a string by a separator.
Parameters
- The string to split.
- The separator to split the string by.
- An optional limit for the returned table size.
Returns
A table.
Splitting a string by an empty separatorplutoprint(dumpvar("ABC":split(""))) -- { "A", "B", "C" }
Splitting a string by a single characterplutolocal s = "hello world, how is everyone doing?"print(dumpvar(s:split(" "))) -- { "hello", "world,", "how", "is", "everyone", "doing?" }
Splitting a string by a substringplutolocal s = "helloFOOworld,FOOhowFOOisFOOeveryoneFOOdoing?"print(dumpvar(s:split("FOO"))) -- { "hello", "world,", "how", "is", "everyone", "doing?" }
Splitting a string by a single character with a limitplutolocal s = "hello world, how is everyone doing?"print(dumpvar(s:split(" ", 3))) -- { "hello", "world,", "how is everyone doing?" }
string.rfind
Identical to the base Lua string.find in every way, except it searches right-to-left instead of left-to-right.
string.strip
Strips or trims characters from both ends of a string.
Parameters
- The string to strip.
- A string of characters to strip. Defaults to
\n\r\t\v\0.
Returns
The new string.
plutolocal s = "{|}hello world{|}"print(string.strip(s, "{}|")) --> hello world
string.lstrip
Strips or trims characters from the left side of a string.
Parameters
- The string to strip.
- A string of characters to strip. Defaults to
\n\r\t\v\0.
Returns
The new string.
plutolocal s = "{|}hello world{|}"print(string.lstrip(s, "{}|")) --> hello world{|}
string.rstrip
Strips or trims characters from the right side of a string.
Parameters
- The string to strip.
- A string of characters to strip. Defaults to
\n\r\t\v\0.
Returns
The new string.
plutolocal s = "{|}hello world{|}"print(string.rstrip(s, "{}|")) --> {|}hello world
string.isascii
Checks if a string is entirely composed of ASCII characters.
Parameters
- The string to check.
plutolocal s = "HELLOWORLD123"print(string.isascii(s)) --> true
This would exclude any multi-byte characters, like emojis.
string.islower
Checks if a string is entirely composed of lowercase characters.
Parameters
- The string to check.
plutolocal s = "helloworld"print(string.islower(s)) --> true
Whitespace characters are not lowercase characters.
string.isalpha
Checks if a string is entirely composed of alphabetic characters.
Parameters
- The string to check.
plutolocal s = "HELLOWORLD"print(string.isalpha(s)) --> true
Whitespace characters are not alphabetic characters.
string.isupper
Checks if a string is entirely composed of uppercase characters.
Parameters
- The string to check.
plutolocal s = "HELLOWORLD"print(string.isupper(s)) --> true
Whitespace characters are not uppercase characters.
string.isalnum
Checks if a string is entirely composed of alphanumeric characters.
Parameters
- The string to check.
plutolocal s = "HELLOWORLD123"print(string.isalnum(s)) --> true
Whitespace characters are not alphanumeric characters.
string.iswhitespace
Checks if this string is entirely composed of whitespace characters.
Paramaters
- The string to check.
plutolocal s = " \t \v \f \t\t\t\t"print(string.iswhitespace(s)) --> true
string.uformat
Same as string.format, but performs the operation under the en_US.UTF-8 locale. Ensures the same result on all systems.
string.replace
Replace substrings with another substring. Similar to string.gsub, but it operates on plain-text and is not burdened by a pattern capture limit.
Parameters
original— The substring to replace.substitute— The replacement substring.max_replace— The maximum number of replacements you wish to occur. The default value is effectively0, which means "infinite". If you pass1, this leads to a maximum of one replacement, and so on.
Errors
An error is thrown under the following conditions:
max_replaceis less than zero.- The length of
substituteis zero.
plutoprint(string.replace("Hello, world!", "!", ".")) --> Hello, world.print(string.replace("Hello, world!", "apple", "")) --> Hello, world!print(string.replace("Hello, world!", "Hello", "Apple")) --> Apple, world!print(string.replace("Hello, world!", "Hello, ", "")) --> world!
string.truncate
Truncates a given string to a specified length. If an elipsis is desired and the string was actually truncated, the last three characters of the resultant string will be replaced with an elipsis.
Parameters
- The string to truncate.
- The desired length of the truncated string.
- A boolean indicating whether or not to replace the last three character of the string with
...if it is truncated. This isfalseby default.
Returns
The truncated string.
plutoprint(string.truncate("Hello, world!", 50)) --> Hello, world!print(string.truncate("Hello, world!", 5)) --> Helloprint(string.truncate("Hello, world!", 5, true)) --> He...
string.contains
Checks if a string contains a substring.
Parameters
- The string to check.
- The substring to check for.
plutolocal s = "hello world"print(string.contains(s, "worl")) --> true
string.casefold
Compares two strings, agnostic of any capitalization.
Parameters
- The first string to compare.
- The second string to compare.
plutolocal s1 = "hello world"local s2 = "heLLo WoRlD"print(string.casefold(s1, s2)) --> true
string.formatint
This function makes an integer easier to read by inserting separator every N characters. It can handle strings representing integers, making it suitable for BigInt modules or any integer beyond Lua's representation limits. If you provide a string, it should consist solely of digits. A single unary operator is permitted at the beginning of the string to indicate whether it's a negative or positive number.
Parameters
integer— The integer or string input.sep— Theseparatorto use. This must be a single-character string.group— The grouping of each digit pair. This isN.
Errors
If the input is a string and does not meet the aforementioned criteria, an error will be thrown.
Usage Exampleplutoprint(string.formatint(500)) --> 500print(string.formatint(-5000)) --> -5,000print(string.formatint(50000)) --> 50,000print(string.formatint(-500000)) --> -500,000print(string.formatint(500, ".", 2)) --> 5.00print(string.formatint("-5000", ",", 1)) --> -5,0,0,0print(string.formatint(50000, ",", 4)) --> 5,0000
Error Exampleplutostring.formatint("-500000.4")
pluto: test.pluto:3: argument 'integer' for string.formatint was a string, but does not represent a valid integer (bad character: '.')stack traceback:[C]: in function 'string.formatint'test.pluto:3: in main chunk[C]: in ?
string.partition
Splits a string once, on the first occurance of a separator.
Parameters
- The string to partition.
- The separator to partition the string by.
- A boolean specifying whether to search from the right. By default, this is false, which starts at the left.
Returns
Two strings: A substring for all the content before the first occurance of sep, and another substring for all the content afterwards.
A Basic Partitionplutolocal s = "hello world, what's up?"local before, after = string.partition(s, " ")assert(before == "hello")assert(after == "world, what's up?")
Partioning From The Rightplutolocal s = "hello world, what's up?"local before, after = string.partition(s, " ", true)assert(before == "hello world, what's")assert(after == "up?")
string.endswith
Checks if a string ends with a suffix.
Parameters
- The string to check.
- The substring suffix to check for.
plutolocal s = "hello world"print(string.endswith(s, "world")) --> true
string.startswith
Checks if a string starts with a prefix.
Parameters
- The string to check.
- The substring prefix to check for.
plutolocal s = "hello world"print(string.startswith(s, "hello")) --> true
string.tohex
Converts a (binary) string to a hex representation.
Parameters
- The string to convert.
- An optional bool to indicate that spaces should be used.
- An optional bool to indicate that the result should be upper-cased.
Returns
A new string.
plutoprint("XYZ":tohex()) --> 58595aprint("XYZ":tohex(true)) --> 58 59 5aprint("XYZ":tohex(false, true)) --> 58595Aprint("XYZ":tohex(true, true)) --> 58 59 5A
string.fromhex
Converts a hex string to binary.
Parameters
- The string to convert.
Returns
A new string.
plutoprint("58595a":fromhex()) --> XYZprint("58 59 5A":fromhex()) --> XYZ
string.span
Returns a substring from a starting position and length. This differs from string.sub, which takes a start and end position.
Parameters
- The string.
- The starting position.
- The length.
Returns
The substring.
plutoprint("abcd":sub(2, 2)) --> bprint("abcd":span(2, 2)) --> bc